package com.oa.pm.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.joneying.common.annotation.CommonService;
import com.oa.core.PageResult;
import com.oa.pm.dto.QuestionnaireSurveyListDTO;
import com.oa.pm.dto.QuestionnaireSurveyDTO;
import com.oa.pm.entity.QuestionnaireQuestions;
import com.oa.pm.entity.QuestionnaireSurvey;
import com.oa.pm.entity.UserQuestionnaireSurveyRecord;
import com.oa.pm.mapper.QuestionnaireSurveyMapper;
import com.oa.pm.service.IQuestionnaireQuestionsService;
import com.oa.pm.service.IQuestionnaireSurveyService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.oa.pm.service.IUserQuestionnaireSurveyRecordService;
import com.oa.pm.vo.QuestionnaireSurveyListVO;
import com.oa.pm.vo.UserQuestionnaireListVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.plugins.Page;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * <p>
 * 问卷调查表 服务实现类
 * </p>
 *
 * @author syb123
 * @since 2019-01-22
 */
@Service
public class QuestionnaireSurveyServiceImpl extends ServiceImpl<QuestionnaireSurveyMapper, QuestionnaireSurvey> implements IQuestionnaireSurveyService {

    private final QuestionnaireSurveyMapper questionnaireSurveyMapper;

    @Autowired
    private IQuestionnaireQuestionsService questionnaireQuestionsService;

    @Autowired
    public QuestionnaireSurveyServiceImpl(QuestionnaireSurveyMapper questionnaireSurveyMapper) {
        this.questionnaireSurveyMapper = questionnaireSurveyMapper;
    }

    @Autowired
    private IUserQuestionnaireSurveyRecordService userQuestionnaireSurveyRecordService;

    @Override
    @CommonService
    public PageResult<QuestionnaireSurvey> findList(Integer pageNum, Integer pageSize) {
        if(pageNum == null){
            List<QuestionnaireSurvey> list = questionnaireSurveyMapper.findList();
            return new PageResult<>(list);
        }else{
            // 当前页，总条数 构造 page 对象
            Page<QuestionnaireSurvey> page = new Page<>(pageNum, pageSize);
            //查询
            List<QuestionnaireSurvey> list = questionnaireSurveyMapper.findList(page);
            return new PageResult<>(list);
        }
    }

    /**
    * 根据id查询
    */
    @Override
    @CommonService
    public QuestionnaireSurvey findQuestionnaireSurveyById(String id){
        return questionnaireSurveyMapper.findById(id);
    }

    @Override
    public PageResult<QuestionnaireSurveyListVO> findQuestionnaireSurveyList(QuestionnaireSurveyListDTO questionnaireSurveyListDTO) {
        return new PageResult<>(questionnaireSurveyMapper.findQuestionnaireSurveyList(questionnaireSurveyListDTO.getPage(), questionnaireSurveyListDTO));
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean addQuestionnaireSurvey(QuestionnaireSurveyDTO questionnaireSurveyDTO) {
        QuestionnaireSurvey questionnaireSurvey = new QuestionnaireSurvey();
        questionnaireSurvey.setTitle(questionnaireSurveyDTO.getTitle());
        questionnaireSurvey.setType(questionnaireSurveyDTO.getType());

        if(!(questionnaireSurvey.getType() > 1)){
            questionnaireSurvey.setReleaseTime(new Date());
        }
        if(insert(questionnaireSurvey)){
            if(questionnaireSurveyDTO.getType() == 1){
                if(questionnaireSurveyDTO.getUserIds() != null && questionnaireSurveyDTO.getUserIds().size() > 0){
                    List<UserQuestionnaireSurveyRecord> userQuestionnaireSurveyRecords = new ArrayList<>();
                    questionnaireSurveyDTO.getUserIds().forEach(d -> {
                        UserQuestionnaireSurveyRecord userQuestionnaireSurveyRecord = new UserQuestionnaireSurveyRecord();
                        userQuestionnaireSurveyRecord.setUserId(d);
                        userQuestionnaireSurveyRecord.setQuestionnaireSurveyId(questionnaireSurvey.getId());
                        userQuestionnaireSurveyRecords.add(userQuestionnaireSurveyRecord);
                    });

                    if(!userQuestionnaireSurveyRecordService.insertBatch(userQuestionnaireSurveyRecords)){
                        return false;
                    }
                }else{
                    return false;
                }
            }

            List<QuestionnaireQuestions> questionnaireQuestionsList = new ArrayList<>();
            for(int i = 0; i < questionnaireSurveyDTO.getTopicIds().size(); i++){
                QuestionnaireQuestions questionnaireQuestion = new QuestionnaireQuestions();
                questionnaireQuestion.setTopicId(questionnaireSurveyDTO.getTopicIds().get(i));
                questionnaireQuestion.setQuestionnaireId(questionnaireSurvey.getId());
                questionnaireQuestionsList.add(questionnaireQuestion);
            }
            if(questionnaireQuestionsService.insertBatch(questionnaireQuestionsList)){
                return true;
            }
        }
        return false;
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public boolean editQuestionnaireSurvey(QuestionnaireSurveyDTO questionnaireSurveyDTO) {
        QuestionnaireSurvey questionnaireSurvey = new QuestionnaireSurvey();
        questionnaireSurvey.setId(questionnaireSurveyDTO.getId());
        questionnaireSurvey.setTitle(questionnaireSurveyDTO.getTitle());
        questionnaireSurvey.setType(questionnaireSurveyDTO.getType());
        if(!(questionnaireSurvey.getType() > 1)){
            questionnaireSurvey.setReleaseTime(new Date());
        }
        if(updateById(questionnaireSurvey)){
            if(questionnaireSurveyDTO.getType() == 1){
                if(questionnaireSurveyDTO.getUserIds() != null && questionnaireSurveyDTO.getUserIds().size() > 0){
                    List<UserQuestionnaireSurveyRecord> userQuestionnaireSurveyRecords = new ArrayList<>();
                    questionnaireSurveyDTO.getUserIds().forEach(d -> {
                        UserQuestionnaireSurveyRecord userQuestionnaireSurveyRecord = new UserQuestionnaireSurveyRecord();
                        userQuestionnaireSurveyRecord.setUserId(d);
                        userQuestionnaireSurveyRecord.setQuestionnaireSurveyId(questionnaireSurvey.getId());
                        userQuestionnaireSurveyRecords.add(userQuestionnaireSurveyRecord);
                    });

                    if(!userQuestionnaireSurveyRecordService.insertBatch(userQuestionnaireSurveyRecords)){
                        return false;
                    }
                }else{
                    return false;
                }
            }

            if(questionnaireQuestionsService.delete(new EntityWrapper<QuestionnaireQuestions>().eq("questionnaire_id", questionnaireSurveyDTO.getId()))){
                List<QuestionnaireQuestions> questionnaireQuestionsList = new ArrayList<>();
                for(int i = 0; i < questionnaireSurveyDTO.getTopicIds().size(); i++){
                    QuestionnaireQuestions questionnaireQuestion = new QuestionnaireQuestions();
                    questionnaireQuestion.setTopicId(questionnaireSurveyDTO.getTopicIds().get(i));
                    questionnaireQuestion.setQuestionnaireId(questionnaireSurvey.getId());
                    questionnaireQuestionsList.add(questionnaireQuestion);
                }
                if(questionnaireQuestionsService.insertBatch(questionnaireQuestionsList)){
                    return true;
                }
            }
        }
        return false;
    }
}
